package model

import exceptions.NoSePuedeObtenerRegistroDeEmpresaAnonimaException
import scala.collection.mutable.ArrayBuffer

object RegistroDAO {
  
	var registros= new ArrayBuffer[Registro]

	def registrosConocidos():List[RegistroConocido]={
	  return registros.toList.collect{case r: RegistroConocido => r }
	}
	
	def getRegistro(empresa: EmpresaRegistrada,anho: Integer): Registro={
		return registrosConocidos.find(r => r.anho == anho && r.empresa == empresa).get
	 }
	
	def eliminarRegistros()= registros.clear
	
	def agregarRegistro(registro: Registro):Unit= registros +=registro
	
	def registrosConocidos(empresa: EmpresaRegistrada): List[Registro]={
	  filtrarRegistrosPor(r => r.empresa == empresa)
	}
	
	def provinciasConRegistros()=	this.registros.collect({case r=> r.empresa.departamento.provincia}).toSet.toList
	
	def provinciasConRegistrosEnElAnho(anho:Integer)={
	  provinciasConRegistros.filter(p => p.registros.exists(r=>r._anho == anho))
	  }
	
	def registrosPorDepartamento(depto: Departamento)={
	  filtrarRegistrosPor(r => r.empresa.departamento == depto)
	}
	
	def filtrarRegistrosPor(f: Registro => Boolean) :List[Registro]={
	  registros.toList.filter(r=> f(r))
	}
	
	def tasaDeGanancias(empresa: EmpresaRegistrada,anho: Integer) :Float=this.getRegistro(empresa,anho).tasaDeGanancias()
	
	def registrosDelAnho(anho: Integer): List[Registro]= filtrarRegistrosPor(_.anho == anho)
}